package cn.tedu.charging.order.controller;

import cn.tedu.charging.common.pojo.JsonResult;
import cn.tedu.charging.order.pojo.param.OrderAddParam;
import cn.tedu.charging.order.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RequestMapping("order")
@RestController
@Api(tags = "订单模块")
public class OrderController {
    /**
     * DTO 数据传输对象 前端把数据传输到后端的controller层，  前端与后端之间传输
     * 服务器之间调用 A服务 调用 B服务 A服务和B服务都是后端    服务与服务之间传输
     *
     * DTO 服务与服务之间传输
     * param 前端与后端之间传输
     *
     * 从功能上讲 用一个 O 来表示各层的数据传输是没有问题的
     *
     * 为了解耦 每一层都独立处理 使用自己的O
     * 创建订单 OrderAddParam OrderCreateParam OrderSaveParam
     * 修改订单 OrderUpdateParam
     * 查询订单 OrderQueryParam  OrderQuery
     *
     *
     *
     * @return
     */

    @Autowired
    private OrderService orderService;

    @ApiOperation("创建订单")
    @PostMapping("create")
    public JsonResult<String> createOrder(@RequestBody OrderAddParam orderAddParam){
        log.debug("创建订单-入参:{}", orderAddParam);
        //创建类型的接口 是否要返回出参? 要根据业务来定
        //业务要求 用户创建订单后，跳转到订单详情页
        //创建订单接口 出参 应该返回 订单号
        //订单号 可以 作为订单详情页的入参

        log.debug("创建订单-orderService:入:{}", orderAddParam);
        String orderNo = orderService.createOrder(orderAddParam);
        log.debug("创建订单-orderService:入参:{},出参:{}", orderAddParam, orderNo);
        JsonResult<String> result = JsonResult.ok(orderNo, "创建订单成功");

        /**
         *  code 2000 表示返回成功
         *  后端工程师和前端工程师基于接口文档编写代码 联调，测试工程师测试 功能
         * 测试工程师 创建订单失败了 然后 截个图 把问题 发到你们的测试群
         * 截图
         * 入参   userId = 123
         * 哪个接口 order/create
         * 结果/出参 弹框 创建订单失败
         *
         * 前端代码 if(code == 2000) {  alert(message); }
         * if(code != 2000) {  alert("message"); }
         *
         */
        log.debug("创建订单-入参:{},出参:{}", orderAddParam, result);
        return result;
    }

}
